package medium

import (
	. "GoLeetcode/common"
)

/*
时间复杂度:O(N)
空间复杂度:O(1)
*/

func totalFruit(fruits []int) int {
	// 用来统计采摘果树的种类
	hash := make(map[int]int)
	left, right := 0, 0
	// 统计能采摘的果树的最大数量
	ans := 0
	// 统计采摘果子的种类数
	kind := 0
	for right < len(fruits) {
		// 这里如果改成 if _, ok := hash[fruits[right]]; !ok { kind++ }
		// 则在for kind > 2 循环内需要改成:
		// if hash[fruits[left]] == 0 {
		//     delete(hash, fruits[left])
		//     kind--
		// }

		if hash[fruits[right]] == 0 {
			kind++
		}
		hash[fruits[right]]++
		for kind > 2 {
			hash[fruits[left]]--
			if hash[fruits[left]] == 0 {
				kind--
			}
			left++
		}
		ans = Max(ans, right-left+1)
		right++
	}
	return ans
}
